﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PGI.EN.TipoUsuario;
using PGI.LN.TipoUsuario;
using PGI.EN.OpcSistema;
using PGI.LN.OpcSistema;
using PGI.EN.OpcSistxTipoUsuario;
using PGI.LN.OpcSistxTipoUsuario;

namespace PGI.WF
{
    public partial class FrmTipoUsuario_OpcSistemaMantenimiento : Form
    {
        public FrmTipoUsuario_OpcSistemaMantenimiento()
        {
            InitializeComponent();
        }

        private void FrmTipoUsuario_OpcSistemaMantenimiento_Load(object sender, EventArgs e)
        {
            try
            {
                lstbTipoUsuario.SelectedIndexChanged -= lstbTipoUsuario_SelectedIndexChanged;
                lstbTipoUsuario.DataSource = TipoUsuarioLn.TipoUsuario_Listar();
                lstbTipoUsuario.DisplayMember = "Descripcion";
                lstbTipoUsuario.ValueMember = "TipoUsuarioID";
                lstbTipoUsuario.SelectedIndex = -1;
                lstbTipoUsuario.SelectedIndexChanged += lstbTipoUsuario_SelectedIndexChanged;
            }
            catch
            {
                MessageBox.Show(this, "No se pudieron cargar los tipos de usuario.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void lstbTipoUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lstbTipoUsuario.SelectedValue != null)
            {
                if (Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString()) != 0)
                {
                    int TipoUsuarioID = Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString());
                    lstbOpcionesSistema.DataSource = OpcSistemaLn.OpcSistema_ListarOpcionesNoHabilitadas(TipoUsuarioID);
                    lstbOpcionesSistema.DisplayMember = "Descripcion";
                    lstbOpcionesSistema.ValueMember = "OpcSistemaID";
                    lstbOpcionesSistema.SelectedIndex = -1;

                    lstbOpcTipoUsuario.DataSource = OpcSistemaLn.OpcSistema_ListarOpcionesHabilitadas(TipoUsuarioID);
                    lstbOpcTipoUsuario.DisplayMember = "Descripcion";
                    lstbOpcTipoUsuario.ValueMember = "OpcSistemaID";
                    lstbOpcTipoUsuario.SelectedIndex = -1;

                    gbOpcionesSistema.Text = "Opciones del Sistema: " + lstbTipoUsuario.GetItemText(lstbTipoUsuario.SelectedItem).ToUpper();
                }
            }
            else
            {
                gbOpcionesSistema.Text = "Opciones del Sistema";
                lstbOpcionesSistema.DataSource = null;
                lstbOpcTipoUsuario.DataSource = null;
            }
        }

        private void lstbOpcionesSistema_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstbOpcTipoUsuario.SelectedIndexChanged -= lstbOpcTipoUsuario_SelectedIndexChanged;
            lstbOpcTipoUsuario.SelectedIndex = -1;
            lstbOpcTipoUsuario.SelectedIndexChanged += lstbOpcTipoUsuario_SelectedIndexChanged;
        }

        private void lstbOpcTipoUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstbOpcionesSistema.SelectedIndexChanged -= lstbOpcionesSistema_SelectedIndexChanged;
            lstbOpcionesSistema.SelectedIndex = -1;
            lstbOpcionesSistema.SelectedIndexChanged += lstbOpcionesSistema_SelectedIndexChanged;
        }

        private void btnIzquierda_Click(object sender, EventArgs e)
        {
            if (lstbOpcTipoUsuario.SelectedIndex != -1)
            {
                int OpcSistemaID = Convert.ToInt32(lstbOpcTipoUsuario.SelectedValue.ToString());
                int TipoUsuarioID = Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString());
                OpcSistxTipoUsuarioEn obj = new OpcSistxTipoUsuarioEn();
                obj.OpcSistemaID = OpcSistemaID;
                obj.TipoUsuarioID = TipoUsuarioID;
                obj.Estado = 0;

                int resultado = OpcSistxTipoUsuarioLn.OpcSistxTipoUsuario_CambiarEstadoNoHabilitado(obj);

                if (resultado == 1)
                {
                    lstbTipoUsuario_SelectedIndexChanged(sender, e);
                }
                if (resultado == -1)
                {
                    MessageBox.Show(this, "Se produjo un error al mover la opción", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show(this, "Debe seleccionar un elemento de la lista de opciones habilitadas", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnDerecha_Click(object sender, EventArgs e)
        {
            if (lstbOpcionesSistema.SelectedIndex != -1)
            {
                int OpcSistemaID = Convert.ToInt32(lstbOpcionesSistema.SelectedValue.ToString());
                int TipoUsuarioID = Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString());
                OpcSistxTipoUsuarioEn obj = new OpcSistxTipoUsuarioEn();
                obj.OpcSistemaID = OpcSistemaID;
                obj.TipoUsuarioID = TipoUsuarioID;

                int resultado = OpcSistxTipoUsuarioLn.OpcSistxTipoUsuario_InsertarOpcion(obj);

                if (resultado == 1)
                {
                    lstbTipoUsuario_SelectedIndexChanged(sender, e);
                }
                if (resultado == -1)
                {
                    MessageBox.Show(this, "Se produjo un error al mover la opción", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show(this, "Debe seleccionar un elemento de la lista de opciones no habilitadas", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                FrmTipoUsuarioInsertar frm = FrmTipoUsuarioInsertar.Instance();
                frm.EstadoForm = 1;
                frm.ShowDialog();
                frm.Activate();
                FrmTipoUsuario_OpcSistemaMantenimiento_Load(sender, e);
                lstbTipoUsuario_SelectedIndexChanged(sender, e);
            }
            catch
            {
                MessageBox.Show(this, "No se puede cargar el formulario de inserción de Tipo Usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            try
            {
                if (lstbTipoUsuario.SelectedIndex != -1)
                {
                    TipoUsuarioEn obj = new TipoUsuarioEn();
                    obj.TipoUsuarioID = Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString());
                    obj.Descripcion = lstbTipoUsuario.GetItemText(lstbTipoUsuario.SelectedItem);

                    FrmTipoUsuarioInsertar frm = FrmTipoUsuarioInsertar.Instance();
                    frm.EstadoForm = 2;
                    frm.tipo_usuarioForm = obj;
                    frm.ShowDialog();
                    frm.Activate();
                    FrmTipoUsuario_OpcSistemaMantenimiento_Load(sender, e);
                    lstbTipoUsuario_SelectedIndexChanged(sender, e);
                }
                else
                {
                    MessageBox.Show(this, "Debe seleccionar un elemento de la lista de tipos de usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch
            {
                MessageBox.Show(this, "No se puede cargar el formulario de edición de Tipo Usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (lstbTipoUsuario.SelectedIndex != -1)
                {
                    DialogResult dr = MessageBox.Show(this, "¿Desea eliminar el Tipo de Usuario: " + lstbTipoUsuario.GetItemText(lstbTipoUsuario.SelectedItem) + "?\n\nIMPORTANTE:\n- Todos los usuarios que posean este rol quedarán inactivos.\n- Luego podrá reactivarlos con un nuevo Tipo de Usuario.", "IMPORTANTE", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                    if (dr == DialogResult.Yes)
                    {
                        int resultado = TipoUsuarioLn.TipoUsuario_Eliminar(Convert.ToInt32(lstbTipoUsuario.SelectedValue.ToString()));

                        if (resultado == 1)
                        {
                            MessageBox.Show(this, "Se eliminó correctamente el tipo de usuario: " + lstbTipoUsuario.GetItemText(lstbTipoUsuario.SelectedItem), "INFORMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            FrmTipoUsuario_OpcSistemaMantenimiento_Load(sender, e);
                            lstbTipoUsuario_SelectedIndexChanged(sender, e);
                        }
                        if (resultado == -1)
                        {
                            MessageBox.Show(this, "Se produjo un error al eliminar el tipo de usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }                    
                }
                else
                {
                    MessageBox.Show(this, "Debe seleccionar un elemento de la lista de tipos de usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch
            {
                MessageBox.Show(this, "Se produjo un error al eliminar el Tipo de Usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FrmTipoUsuario_OpcSistemaMantenimiento_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                this.Dispose();
            }
        }

        

        

        

        
    }
}
